#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef double db;
typedef unsigned long long ull;
typedef long double ldb;

#define in read()
#define pii pair<int,int>
#define fi first
#define se second
#define FILE(x) freopen(x".in","r",stdin);\
	freopen(x".out","w",stdout);
#define pb push_back
#define vec vector<int>

int read(){int x = 0,sgn = 1;char ch = getchar();for(;!isdigit(ch);ch = getchar()) if(ch == '-') sgn = -1;for(;isdigit(ch);ch = getchar()) x = (x<<1)+(x<<3)+(ch^48);return x*sgn;}

const int N = 210;
const ll inf = 0x3f3f3f3f3f3f3f3f;

int a[N],b[N],n,t;
ll sa[N],sb[N],K,f[2][N][N],g[2][N][N],tim,c[N];

template <typename T>
void chkmin(T &x,T y){x = x < y ? x : y;}

int main (){
#ifndef ONLINE_JUDGE
	freopen("1.in","r",stdin);
#endif
	n = in,t = in,K = in;
	for(int i = 1;i <= n;i++) a[i] = in,b[i] = in,c[i] = in;
	a[++n] = 2e9; b[n] = a[n]; c[n] = inf; for(int i = 1;i <= n;i++) sa[i] = sa[i-1] + a[i],sb[i] = sb[i-1] + b[i];
	memset(f,0x3f,sizeof f); memset(g,0x3f,sizeof g); for(int k = 0;k < 2;k++) for(int i = 0;i <= t;i++) f[k][0][i] = 0;
	for(int k = 0;k < 2;k++) for(int i = 0;i <= t;i++) g[k][0][i] = 0;
	for(int i = 1;i <= n;i++)
		for(int j = 0;j <= t;j++)
			for(int k = 0;k < 2;k++){
				if((ll)a[i] * k + (ll)b[i] * j <= c[i] && f[k][i-1][j] < inf){
					chkmin(f[k][i][j],f[k][i-1][j]);
					tim = (sa[i-1] * k + sb[i-1] * j + K - 1) / K;
					if(tim * K <= sa[i] * k + sb[i] * j) chkmin(g[k][i][j],tim);
				}
				for(int r = 0;r < j;r++)
					if((tim = g[k][i][r]) < inf){
						ll lef = k * sa[i] + r * sb[i] - K * tim;
						ll tim2 = (max(0ll,lef + (ll) (j - r) * b[i] - c[i]) + K - 1) / K;
						if(tim2 * K <= lef && f[0][i-1][j - r] < inf){
							chkmin(f[k][i][j],f[0][i-1][j - r] + tim2 + tim);
							ll tim3 = ((j - r) * sb[i-1] + K - 1) / K;
							if(tim3 * K <= lef - tim2 * K + sb[i] * (j - r)) chkmin(g[k][i][j],tim3 + tim2 + tim);
						}
					}
			}
	printf("%lld\n",f[1][n][t]);
	return 0;
}
